/*
 * CSceneVisualisationProxy.h
 *
 *  Created on: 06.01.2013
 *      Author: Kirill Blinov
 *      Copyright: LGPL
 */

#ifndef CSCENEVISUALISATIONPROXY_H_
#define CSCENEVISUALISATIONPROXY_H_

#include "../BasicTypes.h"
#include "Visualisator/GameObject.h"
#include "Manager Resource/CGameWorld.h"

/*
 * This class is used by CVisualisator to get data for
 * every frame. The main goal of CSceneVisualisationProxy
 * is to isolate internal data structure from it's consumer.
 */
class CSceneVisualisationProxy
{
private:
	 CGameWorld::CGameWorldUnitIterator* gameWorldUnits;
	 CGameCamera*                        gameCameras;

private:
	CSceneVisualisationProxy(): gameWorldUnits(NULL), gameCameras(NULL)
    {};

public:
	CSceneVisualisationProxy( CGameWorld::CGameWorldUnitIterator* GameWorldUnits, CGameCamera* GameCameras );

	virtual ~CSceneVisualisationProxy();

	/*
	 * Get OpenGL identifier of currently used vertex array
	 */
	GLuint GetVertexArrayId();

	/*
	 * Return a game object describes GUI base shape
	 */
	GAME_OBJECT* GetGuiModel();

	/*
	 * Returns array of cameras in current frame
	 */
	std::vector<GAME_CAMERA*> GetGameCameras();

	std::vector<GUI_ELEMENT*> GetGuiElements();

	std::vector<GAME_OBJECT*> GetGameObjects();
};

#endif /* CSCENEVISUALISATIONPROXY_H_ */
